1. 网络层的几个重要概念
- 计算机网络
模仿电信网络,使用面向连接通信方式 - 通信之前先建立
虚电路VC(Virtual Circuit)(即连接),以保证双方通信所需的一切网络资源 - 如果再使用
可靠传输的网络协议,可使所发送的分组无差错按照次序到达终点,不丢失,不重复。
1.1 虚电路服务
虚电路只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式来传送,并不是真正建立了一条物理连接
1.2 数据报服务
网路在发送分组之前不需要先进行连接。每一个分组分组(IP数据报)独立发送,与其前后的分组无关。
由于传输网络不提供端到端的可靠传输服务,这就使得网络中的路由器比较简单。
网络层要设计得尽量简单,向其上层只提供简单灵活、无连接的、尽最大努力交付的数据报服务
- 网络在发送分组的时候不需要先建立连接
- 每一个分组
(即IP数据报)独立发送,与其前后的分组无关(不进行编号) - 网络层不提供服务质量的承诺。即所传送的分支可能出错、丢失、重复和时序
(不按序到达终点),也不保证分组传输的时限
由主机中的运输层负责可靠的通信
| 对比的方面 | 虚电路服务 | 数据报服务 |
|---|---|---|
| 思路 | 可靠的通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
| 连接的建立 | 必须有 | 不需要 |
| 终点地址 | 仅在连接建立的阶段来使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
| 分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
| 当结点出故障的时候 | 所有通过出故障的节点的虚电路均不能工作 | 出故障的节点可能会丢失分组,一些路由可能会发生变化 |
| 分组的顺序 | 总是按照发送顺序到达终点 | 到达终点时不一定按发送顺序 |
| 端到端的查错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
1.3 物理层上的数据交换技术与虚电路服务技术
电路交换:
建立连接-通信-释放连接,它的传输单位是报文,整个报文的比特流连续的从源点到达终点,这个过程中始终占用这个连接。报文交换:
无需建立连接,它并不占用一整条连接,而是一段一段的。
当两台计算机进行通信的时候,应该先建立连接,在分组交换中建立一条虚电路(Virtual CirCuit),然后双方就沿着建立的虚电路发送分组。这样一来,分组的首部就不需要填充完整的目的主机地址,而只要填写这条虚电路的编号就可以了。
通过虚电路服务如果再使用可靠传输的网络协议,所发送的分组就可以无差错地按序到达终点,不存在丢失与重复的情况。两台主机之间进行分组的交换都必须在实现建立好的虚电路上。
数据报文中的虚电路号:当两台建立了虚电路的机器相互通信的时候,可以根据数据报文中的虚电路号,通过查找交换机的虚电路表从而得到它的输出线路,进而将数据传送到目的端
采用虚电路网络会使得网络核心部分变得复杂,需要所有经过这条电路的节点来进行共同的维护。如果虚拟电路断开,那么数据将会丢失,只能重新建立虚电路。
问题:电路交换和虚电路交换技术都存在一个核心,那就是建立一条连接通路,这两者有什么区别?
- 物理连接层面上:
CS(电路交换)是在通信的时候建立电路,在通信完毕的时候拆除电路,建立的线路是不固定的。而虚电路交换表示这只是一种逻辑上的连接,其传输的分组都沿着这条逻辑连接按照存储转发的方式传送,一般来说通信线路由交换机的虚电路表来维护。 - 传输单元上看:
CS(电路交换)的传输是传输报文数据,虚电路传输的是分组
问题:分组交换(数据报服务)和虚电路交换都是通过分组来传输数据的,它们有什么区别?
- 从
通信线路连接的角度上来看:虚电路需要在交换机中维护一张虚电路编号表,这张表就代表着在进行虚电路交换的时候需要建立一层虚拟连接,而数据报服务不需要建立连接即可 - 从
数据传输单元内容来看:虚电路上的数据单元的包头含有的是虚电路的编号,而数据报服务含有的是完整的终点地址。
1.4 网络层的两个层面
不同网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成
在路由器之间传送的信息有以下2大类
- 数据
- 路由信息
(为数据传送服务)
数据层面
- 路由器根据本路由器生成的
转发表,把收到的分组从查找到的对应接口转发出去 - 独立工作
- 采用
硬件进行转发,快
控制层面
- 根据路由选择协议的路由算法计算路由,创建出本路由器的路由表
- 许多路由器协同动作
- 采用软件计算
软件定义网络SDN(Software Defined Network)
路由器:查找转发表,转发分组
2. 网际协议IP
与网际协议配套的3个协议
地址解析协议ARP(Address Resolution Protocol):其作用进行网络地址与MAC地址之间的转换
网际控制报文协议ICMP(Internet Control Message Protocol)
网际组管理协议IGMP(Internet Group Management Protocol)
2.1 虚拟互联网络
虚拟互联网络是为了实现网络互通、将异构的网络互相连接起来
其中一种方案就是使用中间设备进行互联
| 层 | 中间设备 |
|---|---|
| 运输层及以上 | 网关(GateWay) |
| 网络层 | 路由器(router) |
| 数据链路层 | 网桥或者桥接器(bridge),交换机(switch) |
| 物理层 | 转发器 |
2.2 IP地址与MAC地址之间的关系
从最终的结果这个角度上来讲,数据包的目标IP地址决定了数据包最终将会到达哪一台计算机,而目标MAC地址决定了该数据包下一跳将由哪个数据进行接收,不一定是终点。
从这张图可以简单总结一下,首先数据包包含了起点的IP地址和终点的IP地址,这是在数据链路层以上定义的。而在发送交换过程中,需要记录下一跳的硬件MAC地址,因此在每次运输到新的以太网的路由器的时候,都会经过拆解数据链路层封装的帧信息,也就是将帧中的目标MAC地址更新,直到到达目标硬件被接收。
其中路由器起到了比较重要的作用,也就是将源地址和目标地址进行了路由转换,从而找到合适的端口将其转发出去。可以简单归纳为:在不同的网段中转发数据包
如果只有MAC地址而没有IP地址会怎么样?
如果没有IP地址,那么交换机在转发数据的时候,需要记住所有设备的MAC地址,并记住这些MAC地址所对应的端口映射,姑且不谈当设备的MAC地址发生变化的时候(不是指MAC地址本身发生变化,而是说MAC地址所对应的设备链接的端口发生了变化),与之相关的所有交换机都要发生对应的更新,这将会是非常巨大的开销,至于IP地址所具有的好处,下面将会开始讲解。
2.3 IP地址格式
IP地址用32位二进制来进行表示,也就是32比特,4个字节,这些位通常分割为4个部分,每一部分8个二进制位,中间使用符号.进行隔开,这种方法被称为点分十进制法
2.4 子网掩码
子网掩码:叫做网络掩码,地址掩码,它是用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码,子网掩码只有一个作用,就是将某个IP地址区分为网络部分和主机部分。
子网掩码的计算过程是与运算,这样做的目的是为了屏蔽主机位上的值
3. IP地址分类
3.1 A类地址
网络地址的最高位是0的地址为A类地址。网络ID是0则不能用,127作为保留网段,因此A类地址的第一部分取值是1~126。
A类地址默认子网掩码为255.0.0.0,主机ID由第二部分、第三部分和第四部分组成,每部分的取值都是0~255一共256个取值,同时需要知道的是,主机ID全为0的地址是网络地址,而主机ID全部为1是广播地址。
3.2 B类地址
网络地址的最高位是10 的地址是B类地址,IP地址第一部分取值范围是128-191
B类地址的默认子网掩码是255.255.0.0,主机ID由第三部分和第四部分组成。
3.3 C类地址
网络地址的最高位是110的地址是C类地址,IP地址的第一部分取值是192-223,C类地址的默认子网掩码是255.255.255.0,主机ID由第四部分组成,每个C类网络可以容纳的最主机数就是256-1(全1)-0(全0) = 254
3.4 D类地址和E类地址
网络地址的最高位是1110的地址是D类地址,D类地址的第一部分的取值范围是224-239,用于多播组播的地址,组播地址是没有子网掩码的。
子网掩码的目的是为了区分主机号与网络号,如果是多播,那么就是广播到多个主机,子网掩码就失去了其作用。
网络地址的最高位是11110地址为E类地址,第一部分取值范围240-254,保留为今后使用
其实所谓的分类也就是将所有的IP地址进行拼接与分离。
3.5 保留的IP地址
- 主机ID全为0的地址,特指某个网段,比如
192.168.10.0 255.255.255.0指的是192.168.10.0网段 - 主机ID全部为1的地址,特指该网段上的所有主机,数据链路层发送的将会是
FF-FF-FF-FF-FF-FF - 127.0.0.1:是本地环回地址,指的是本机IP地址,一般用来测试和使用,回送地址
127.x.x.x:是本地回送地址Loopback Address,也就是主机IP堆栈内部的IP地址
3.6 公网地址和私网地址
公网地址:公有地址和管理由Inter NIC负责,各级ISP使用的公网地址都需要进行申请,这样就能保证地址块不冲突私网地址:创建IP寻址方案的人也创建了私网IP地址,这些地址可以被用于私有网络,在Internet没有这些IP地址,Internet上的路由器也没有到私有网络的路由表
3.7 网络地址转换技术NAT
私网地址访问Internet需要NAT或者PAT,原理图如下
简单来说,NAT就是提供一个转换技术,内网使用一个私有的网段地址,当要与互联网通信的时候,将私有的地址转换为公网地址,让公网地址去与外部通信。
来回顾一下私网与公网的交互过程,首先就是私网的计算机要与公网的计算机进行通信,那么必然就要发送分组,分组中会包装源地址和目的地址,假设我们包装私网的IP去访问公网,是没问题的,因为路由器的特性决定了我只关注你要去哪里,而不关注你从哪里来,因此尽管你这个私网地址是无法从公网到达的,我也能将数据报发送到公网的计算机去。
然后公网的计算机要响应数据给私网的计算机了,这时候路由器就会蒙圈,因为你之前用的是私网的IP,路由器转发表中并没有私网的IP啊,这时候响应的数据就会发不回去,就会出现ping失败的现象。
那么怎么办呢?提供一个可在路由转发表的公网IP,作为私网的数据出口,每一个要与公网通信的私网IP都通过此路由器,将私网IP修改为公网IP,然后依次转发,这样就能确保响应数据的时候,数据能够回来。
也许你会问,既然知道了数据是通过公网IP回来的,那么如果我私网IP有很多个同时发数据出去,然后同时接数据回来,这时候我怎么确认哪个包是哪个客户端的呢?这里看一下百度百科的定义。
NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。
①如右图1这个 client(终端) 的 gateway (网关)设定为 NAT 主机,所以当要连上 Internet 的时候,该封包就会被送到 NAT 主机,这个时候的封包 Header 之 source IP(源IP) 为 192.168.1.100 ;
图1 Nat工作流程2
②而透过这个 NAT 主机,它会将 client 的对外联机封包的 source IP ( 192.168.1.100 ) 伪装成 ppp0 ( 假设为拨接情况 )这个接口所具有的公共 IP ,因为是公共 IP 了,所以这个封包就可以连上 Internet 了,同时 NAT 主机并且会记忆这个联机的封包是由哪一个 ( 192.168.1.100 ) client 端传送来的;
③由 Internet 传送回来的封包,当然由 NAT主机来接收了,这个时候, NAT 主机会去查询原本记录的路由信息,并将目标 IP 由 ppp0 上面的公共 IP 改回原来的 192.168.1.100 ;
④最后则由 NAT 主机将该封包传送给原先发送封包的 Client [2] 。
可以看到NAT主机帮我们做了这个事情,也就是在数据报中记录了私网原IP,便于复原。
4.子网划分
4.1 等长子网划分
子网划分:就是借用现有网段的主机位做子网位,划分出多个子网。
等长子网划分:就是将一个网段等分成多个网段,也就是等分成多个子网
- 需要确定子网掩码的长度
- 需要确定子网中第一个可用IP地址和最后一个可用的IP地址
4.2 变长子网划分
简单来说就是根据设备的个数来划定网段,并且根据网段来确定子网掩码,最简单的办法是根据最大的设备数量来确定基础网段,然后再根据基础网段进行位运算,根据位运算后的结果来确定子网掩码。
如果一个子网地址块是原来网段的$$(\frac{1}{2})^n$$,子网掩码就在原网段的基础上后移n位,不等长子网,其子网掩码也不相同。
在上述的划分中,还有D和E网段还没有被使用,而且这两个网段所需要的IP地址数量为2,加上全0和全1的限制,那么就是需要4个IP地址。
观察到032还没有被用,因此接下来考虑如何使用`032`的地址
4. CIDR无分类
IP地址有类的概念,A类地址默认子网掩码255.0.0.0,B类地址的默认子网掩码是255.255.0.0,C类地址的默认子网掩码是255.255.255.0,等长子网划分和变长子网划分,打破了IP地址类的概念,子网掩码也打破了字节的限制,这种子网掩码被称为VLSM,可变长子网掩码
这种方式的也可以使得路由器上的路由表大大精简,被称为CIDR(Classless Inter-Domain Routing),子网掩码中1的个数被称为CIDR值
CIDR:无分类域间路由选择。- 消除了传统的A类、B类和C类地址以及划分子网的概念,可以更加有效地分配
IPv4,但无法解决IP地址枯竭的问题
要点
- 网络前缀
- 地址块
- 地址掩码
4.1 网络前缀
2级结构,2个字段:网络前缀和主机号,IP地址::={<网络前缀>,<主机号>}
网络前缀的位数n是多少?
最大的区别:前缀的位数n不固定,可以在0~32之间选取任意值。
CIDR记法:斜线记法,二进制IP地址的前n位是网络前缀,例如128.14.35.7/20的前20位是网络前缀。
4.2 地址块
CIDR把网络前缀都相同的所有连接的IP组成一个CIDR的地址块- 一个
CIDR地址包括的IP地址数目,取决于网络前缀的位数
4.3 地址掩码(address mask)
也就是子网掩码,位数32位,目的让机器从IP地址迅速算出网络地址。
4.4 构造超网
超网的构造可以看作是划分子网的逆运算
其本质是对网络地址的合并,合并若干个x类网络,其具体手段可以是将子网掩码向左位移n位,达到合并的效果。什么场景下需要子网的合并?
当有一个交换机A下有200台计算机,交换机B下有200台计算机,由于超出了其向上的最大一个数量限制是255,因此分配地址的时候需要两个网段,比如说是192.168.0.0和192.168.1.0,如果没有子网合并(超网)技术,那么就需要在路由器中建立路由表,记录下192.168.0.0和192.168.1.0这也就意味着:
这两个交换机下的设备是可以直接通过交换机的相互交换来进行通信的,可是现在需要多了一层路由器来进行转发。
可见,并不是任何连续的网段都能被合并,比如说我想合并1和2,那这时候由于有两位不一样,因此需要子网掩码向左移动两位才足够,但是这时候就把0和3都一起合并进来了,这时候可能就会合并了冲突的网段,可能导致有问题产生。
结论:判断连续的2个网段是否能够合并,只要第一个网络号能被2整除,就能够通过左移1位子网掩码合并
这句话有两个关键点,连续以及网络号有序
推广的,对于n个网段是否能够被合并,只要第一个网络号能被n整除,就能够通过左移(log2n)位子网合并
4.5 判断一个网段是子网还超网
通过左移子网掩码合并多个网段,右移子网掩码将一个网段划分为了多个子网。
如果要判断一个网段到底是子网还是超网,就要看该网段是A类网络还是B类网络,还是C类网络,默认A类子网掩码/8,B类子网掩码/16,C类子网掩码/24
如果该网段的子网掩码比默认子网掩码要长,那就是子网,如果该网段的子网掩码比默认掩码要短,那就是超网。
这个比较好理解,子网掩码左移的话就证明网络号缩短,主机号增长,主机号增多,网段下的主机数量增加,网段被合并,子网掩码右移的话网络号增长,主机号缩短,网段下的主机数量减少,网段被划分。
所谓默认子网掩码的话就是要看网络号,根据网络来判断其是哪一类地址
5. 静态路由
5.1 路由-网络层实现的功能
网络层的功能就是给传输层协议提供简单灵活的、无连接的、尽最大努力交付的数据包服务
通俗地来说,网络中的路由器为每一个数据包单独选择转发路径,网络层不提供服务质量的承诺
也就是说路由器直接丢弃传输过程中出错的数据包,如果网络中代发的数据包太多,路由器处理不了也会直接丢弃,路由器也不判断数据包是否重复,也不确保数据包按照顺序发往目标地址
网络畅通的条件:数据包有去有回
5.2 静态路由
在初始时,路由器只知道直连的网络地址,但是如果间隔某个节点,也就是目标节点对于这个路由器不是直连的,这个路由器就不知道怎么走了,这时候就需要网络管路员告诉路由器,这个地址该怎么走。
添加静态路由的基本指令
ip route <目标网段> <子网掩码> <出去的地址>
#如果想要单独发送给某个地址id
ip route <目标ip> <255.255.255.255> <出去的地址>
点到点的链路的下一跳可以是路由器的出口
删除路由的基本指令
no ip route <目标网段> <子网掩码> <出去的地址>
5.3 路由汇总与默认路由
路由汇总指的是将一部分相同网络地址的路由网络汇总起来,这样的话边缘理由只需要转发数据包到一个汇总路由上就可以完成转发功能。
简而言之,就是路由器在转发数据的时候,会先检查子网掩码长的,后检查子网掩码短的,这样的话可以保证子网掩码长的ip地址被检查到,否则会因为子网掩码长的ip把子网掩码短的ip给覆盖了而永远检查不到子网掩码长的ip地址。
默认路由
添加默认路由
ip route 0.0.0.0 0.0.0.0 10.0.0.2
其中0.0.0.0这个地址涵盖了所有的网段,是最大的路由,这个路由称为默认路由
默认路由的使用场景
如何理解这个操作呢?我们以路由器B为例,路由器B是一个末端路由器,连接在网段为10.1.0.0/24的以太网的末端上,可以看到B如果要转发数据到其他网段,其必经之路是10.2.0.1/24,那么就存在一种甩锅的手段,也就是说如果我B路由表中查找不到了下一跳地址,那么我就会把这个查询交给我的必由之路,让它去查询有没有,一层层地发过去,直到找到为止。
对于C这种而言,它处于有多边连接的,这种默认路由的选择就是先指定其他路由地址,然后剩下任意一个的时候,把它作为默认路由即可。
6. 动态路由
6.1 RIP协议简介
路由信息协议RIP(Routing Information protocol)是一个距离矢量路由选择协议
它每隔30秒就送出自己完整的路由表到所有激活的端口
RIP协议选择最优的标准就是跳数,认为到达目标网络所经过的路由器最少的路径就是最佳路径
默认它允许的最大跳数为15跳,也就是说16跳及其以上的距离被认为就是不可达的
在小型网络中,RIP会运转良好,但是对于慢速WAN连接的大型网络或者安装有大量路由器的网络来说,它的效率就比较低。
6.2 RIP协议工作原理
看图说话
我们以网段
192.168.10.0为例进行一个流程的讲述。首先路由器4.0.0.1会收到来自网段192.168.10.0的信息,这时候E0路由器会先将网段192.168.10.0的距离记入路由表,由于是直连的,因此距离为0,然后到了一定的时间片之后,触发RIP协议,相邻路由器之间交换路由表,然后4.0.0.1将路由表交给了B,B路由器开始推算,由于要到达网段192.168.10.0(下称N)是要经过路由器A,而A到网段N是要距离0的,因此B记录下字段目标网络192.168.10.0 距离1 下一跳2.0.0.1,同样,路由表交换到C的时候也是相同的步骤,它推算的依据是B交换过来的路由表这是基本的工作流程,如果有交换过来的路由表,到达目标网络的距离比当前路由表中的距离要更小,这时候就会打擂替换掉原来的下一跳以及距离。
简单来说,RIP协议选择路由器的标准就是跳数,每隔30秒就更新路由信息,向整个网络中的路由器广播自己,从而达到信息更新的目的
- RIPv1:靠的是广播信息,不带子网掩码,不支持变长子网,支持等长子网
- RIPv2:使用的是多播通告,带子网掩码,支持变长子网
RIP协议的缺点
好消息传播得快,坏消息传播得慢,当网络出现故障的时候,要经过比较长的时间才能够将此信息
(坏消息)传送到所有的路由器。
出了故障之前,R1和R2中的路由表保持正常的通信路由,这时候R1知道它到网1的距离是1,R2知道它到网3的距离是1,然后出了故障之后,R1认为网1就不可达了,其具体的手段就是将路由表中的网1距离修改为16,但是这时候如果R2还没有收到R1的更新报文,声明网1不可达了,这时候就会出现一种极端情况
R2发送原来的路由表给R1,这时候R1就会认为,R2找到了一条更短的路径到网1,其实可以解释为它认为网1迁移到了R2那一边,然后就会更新自己的路由表,将R2发送过来的+1,然后R2拿到它的路由表,由于R2不是和网1直连的,它认为网1在R1那一边的,然后它也加1,然后一直传来传去,直到到达16,它终于知道–网1不可达。
6.3 RIP数据包的格式
RIP的首部占4个字节,其中的命令字段指出报文的意义,例如1表示的是请求理由信息,2表示请求理由信息的响应或者未被请求而发出的路由更新报文,首部后面的必为0是为了进行字节的对齐
RIPv2报文中的路由部分由若干个路由信息组成,每个路由信息需要用20个字节,地址族标识符字段用来标识所使用的地址协议。如果采用的是IP协议,就令这个字段的值为2。原来考虑RIP也可以用于其他非TCP/IP协议的情况。路由标记填入自治系统号ASN,这是考虑使得RIP有可能接收到本自治系统意外的路由选择信息,再后面指出某个网络地址,该网络的子网掩码、下一跳的路由器地址以及到此网络的距离。一个RIP报文最多可以包括25个路由,因此RIP报文的最大长度是4+20*25=504字节。
7. 网络层的首部
7.1 格式
IP数据包首部的格式能够说明IP协议都具有什么功能
IP数据包由首部和数据两部分组成,首部的前一部分是固定长度,共20个字节,是所有IP数据包必须有的,在首部的固定部分的后面是一些可选的字段,其长度是可变的。
这个图该如何来看呢?首先要看懂这个图的单位,竖着下来的首部具有20个字节,是表示固定部分具有20个字节,横着过来的写着的是0~31位,也就是说在分成每层4个字节的情况下,在这一层中,每4个字节中,有多少位是用来表示这些数据的。
比如说第03个字节,其中第03个二进制位用来表示版本号。
值得注意的是,由于数据的封装,我们认为传输层下来的东西都在数据部分中
7.2 版本和首部长度
版本占4位,指IP协议的版本,IP协议目前有ipv4和ipv6,通信双方使用的IP协议必须一致,目前广泛使用的IP协议版本号为4
首部长度占4位,可表示的最大十进制数为15,请注意,这个字段所表示的数的单位是32位二进制数(4个字节),因此,当IP的首部长度为1111的时候,也就是十进制的15的时候,首部的长度就达到了60个字节。
7.3 区分服务
简单来说,区分服务就是一个优先级字段,它的作用是在出口队列中给这个数据包指定转发次序,优先级高的先转发出去,以便获得较高的带宽。但是这种服务是有要求的,它要求请求方和接收方都认可这种标记,否则的话这个字段就起不到作用。
它占8位,配置计算机给特定应用程序的数据包添加一个标志,然后再配置网络中的路由器优先转发这些带标志的数据包,在网络带宽比较紧张的情况下,也能确保这种应用的带宽有保障,这就是区分服务,为这种服务保证服务质量。
7.4 总长度
总长度占的地位是第0个字节的第16-31个比特,它用来指代包含首部和数据部分的总长度。因此数据包的最大长度就是65536个字节
但是回顾之前数据链路层的内容的话,一个帧的数据部分不能超过1500个字节,而65536个字节是远远超过了的,因此需要进行分片
7.5 分片标志
分派标志一共有3位:
- 分片标志的最后一位作用是用来标志是否是最后一个分片,如果是最后一个分片,则分片标志为0,否则为1
- 第二位的作用是用来标志是否允许分片,如果是1,那么就不允许分片,否则可以
7.6 片偏移
7.7 生存时间
占8位,指示数据报在网络中可通过的路由器的最大值
7.8 协议
占8位,指出此数据携带的数据使用的协议,以便目的主机的IP层将数据部分上交给哪个处理进程
7.9 首部校验和
首部校验和,占16位,只校验数据包的首部,不校验数据部分,这里不采用CRC检验码而采用简单的计算方法
8. 内部网关协议OSPF
8.1 最短路径优先
将计算机拓扑图中的节点看作为图中的节点,然后各条链路之间为其指定权值 ,然后从任一点出发,计算从这一条到其他任意点的最小权值和,这就是最短路径优先算法。
8.2 OSPF术语
- Router-ID
网络中运行OSPF协议的路由器要有一个唯一的标识,这就是Router-ID,并且Router-ID在网络中绝对不可以有重复
- COST
(开销)
OSPF协议选择最佳的路径的标准是带宽,带宽越高计算出来的开销越低。到达目标网络的各个链路累计开销最低的,就是最佳路径
- LINK
就是路由器上的接口,指的是OSPF进程下的接口
- LINK-STATE
链路状态(LSA)就是OSPF接口上的描述信息,例如接口上的IP地址,子网掩码,网络类型,Cost值等等,OSPF路由器之间交换的并不是路由表,而是链路状态LSA。OSPF通过获得网络中所有的链路状态信息信息,从而计算出每个目标精确的网络路径。OSPF路由器会将自己所有的链路状态毫不保留的发给邻居,并且在传递的过程中不会有任何的修改,通过这样的过程,最终,网络中所有的OSPF路由器都拥有网络中所有的链路状态,并且所有的路由器的链路状态应该能描述出相同的网络拓扑
- Neighbor
OSPF只有邻居才会交换LSA
看图说话
首先是初始状态下,路由器并没有互相发现对方,这时候为了发现对方,会发现
hello数据包,收到的hello数据包的路由器会依照发送者的地址回送给地方,这时候互相就确定了邻居关系。确定了邻居关系之后,就需要开始交换
LSA,它首先会给对方发送它自己的LSA数据库描述表,然后对方响应自己的LSA数据库描述表,接收发送确认信息,注意这个确认和第三个阶段的ACK是不一样的。这个阶段称为交换状态,交换状态的目的是为了维护LSA数据库的一致性,也就是说维护整个网络拓扑结构的唯一性。接着进入加载状态,这时候路由器经过加载状态会发生自己缺少的LSA信息,然后向邻居节点发送获取LSA请求信息,从而补齐自己的LSA数据库,如果邻居没有,邻居就会向邻居的邻居请求信息。从而达到一种洪泛的效果。收到信息后会返回一个
ACK,确认收到了最终完成了LSA的一致性统计,运行算法。
总结一下,OSPF有五种报文
- 类型1:问候
hello数据包,它是用来发现并建立邻居关系的 - 类型2:数据库
Database Description描述数据包,向邻居给出总计的链路状态数据库中的所有链路状态项目的摘要信息 - 类型3:链路状态请求
LSR(LinkStateRequest)数据包,向对方请求某些链路状态项目的完整信息 - 类型4:链路状态更新
LSU(LinkStateUpdate)数据包,用洪泛法对全网更新链路状态,这种数据包是最复杂的,也是OSPF最核心的部分,路由器使用这种数据包将其链路状态通知给相邻路由器,在OSPF中,只有LSU需要需要显示确认 - 类型5:链路状态确认
(LinkStateAcknowledgement):数据包,对LSU做确认。
8.3 OSPF支持多AS
OSPF将自治系统划分为两种不同的区域。
其中每个区域会有一个发言人,被称为区域边界路由器ABR(area border router)
在主干区域中的所有路由器被称为主干路由器(backbone router)
在自治系统边界也有一个发言人,这个发言人对外界自治系统进行发言,连接到外部自治系统,被称为自治系统边界路由器ASBR(AS border router)
9. 外部网关协议BGP
9.1 BGP简介
BGP是不同自治系统的路由器之间交换路由信息的协议
- 用于自治系统
AS之间的路由选择 - 只能是力求选择出一条能够到达目的网络而且比较好的路由
(不能兜圈子),而并非要计算出一条最佳路由 - 底层是路径向量路由选择协议
BGP的发言人BGP SPEAKER,也就是在上面所说的自治系统边界路由器,它的存在是为了在边界路由器之间交换信息。
9.2 eBGP和iBGP连接
在AS之间,BGP发言者在半永久TCP连接,其端口号是179,在此TCP连接上交换BGP报文以建立BGP会话,利用BGP会话交换路由信息
- 增加新的路由
- 撤销过时的路由
- 报告出错的情况
使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或者对等站
BGP发言人要交换网络可达性信息,要到达某个网络所需要经过的一系列自治系统。
- eBGP:运行eBGP协议,在不同的AS之间交换路由信息
- iBGP:运行iBGP协议,在AS内部交换BGP路由信息,通常也就是在网络内部通知各个路由器要发送到外部自治系统该怎么走。
同一个协议BGP所使用的报文类型、使用属性、使用的状态机(也就是工作流程)都是完全一致的。但是在通报前缀时使用的规则不同:
在eBGP连接的对等端得知的前缀信息,可以通报给一个iBGP连接的对等端,反过来也是可以的
但从iBGP连接的对等端得知的前缀信息,不能够通报给另一个iBGP连接的对等端
9.3 报文
- Open报文:用来与相邻的发言人建立关系,使得通信初始化
- Update报文:用来通告某一路由的信息,以及列出要撤销的多条路由
- KEEPLIBBE报文:用来周期性地证实邻站的连通性
- NOTIUFICATION通知报文:用来发送检测到的差错。
9.4 BGP路由信息
看图说话
这个图中为我们绘制了两条路由路径,这两条路由路径分别有两个关键发言人,分别是IP3a和IP3c, 我们以这两个关键发言人进行分组
对于IP3a,如果要经过IP3a找到X路由器,那么路由信息描述为
[前缀,AS-PATH,NEXT-HOP]其中:
- 前缀:指明要到哪一个子网
- BGP属性:最重要的两个属性,自治系统路径
AS-PATH,下一跳NEXT-HOP那么我要到
X这个子网,然后我(AS1)要经过的自治系统的路径是AS2,AS3,我下一跳要发给IP2a。因此表述为[X,AS2,AS3,IP2a]对于
IP3c,那么就是要到
X这个子网,我要经过的自治系统是AS3,我下一跳要发给IP3c,因此描述为[X,AS3,IP3c]要特别注意的是,这个下一跳是针对于整个自治系统而言的,因此总是边界发言人的端口
(下一个自治系统的端口)
9.5 路由选择算法
- 本地偏好值最高的路由
- AS跳数最小的路由
- 热土豆路由选择算法
- BGPID数值最小的路由。具有多个接口的路由器有多个IP地址,BGPID就使用该路由器的IP地址中数值最大的一个
10. 路由器
10.1 构成
路由器工作在网络层,用于设备的互联,是互联网中的关键设备,路由器的主要工作,进行转发分组,把从某个输入端口收到的分组,按照分组要去的目的地(也就是目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器
路由器整体来说可以分为两部分,一部分可以分为分组转发部分,一部分可以分为路由选择部分
- 软件层面
软件层面由路由选择协议、路由表组成,这些属于软件逻辑上的组件,它决定了路由器收到一个分组之后,通过哪些端口进行分组分发与传输。
- 硬件层面
它决定了路由器收到分组之后,如何处理这些分组,将这些分组存储在何种机构当中,并且解释了为什么会有丢包现象的产生(这是因为分组被收到之后,如果存储设备无法存储下所有的分组之后,对于后续来的分组就会将其丢弃。)
路由器进行分组转发的整个流程
从线路中接收分组,从输入端口接收比特(物理层工作),然后对于数据链路上包装而来的数据进行首部和尾部的剥除。
然后就开始网络层的解析,若收到的分组是交换路由信息的分组,送交路由选择处理机
如果收到的是数据分组,按目的查找转发表,根据得出的结果,经过交换结构到达合适的输出端口,若某分组正在查找转发表,则该分组排队等待。
接着就是分发到其他路由器/网络了,输出的端口会从交换结构中接收分组数据,当交换结构传输数据的速度过快而输出端口的输出速度跟不上的时候,这时候就会启用缓存队列,依次地将各个分组通过输出端口输出到外部,当分组处理的速率赶不上分组进入队列的速率的时候,队列满的时候,就会丢弃后面进入的分组
10.2 交换结构
交换结构一般有三种存在形式
- 通过存储器进行交换,类似于缓冲队列
- 通过互联网络进行交换,类似于交换机设备
- 通过总线型设备进行交换,类似于集线器设备
11.IP多播
11.1 基本概念
- 多播
(multicast):一对多通信,从一个源点发送到多个终点
在网络上进行多播就叫做IP多播,互联网范围内的多播要依赖于路由器进行实现,能够运行多播协议的路由器称为多播路由器,多播是单播的扩展,多播路由器也支持普通的单播。
- 多播
IP地址:在IP多播数据报的目的地址需要写入多播组的标识符,多播组的标识符就是IP地址中的D类地址(多播地址),地址范围:224.0.0.0~239.255.255.255,每一个D类地址标志一个多播组
多播数据报
目的地址:使用D类的IP地址
协议字段=2,表示使用网际组管理协议IGMP
尽最大努力进行交付,不保证一定能够交付多播组内的所有的成员
对多播数据报不产生IGMP差错报文,在Ping多播地址后将永远不会收到回应。
11.2 在局域网上进行硬件多播
11.3 网际组管理协议IGMP和多播路由选择协议
网际组管理协议IGMP:使得多播路由器知道多播组成员信息(有无成员)
多播路由选择协议,使得多播路由器协同工作,把多播数据报用最小代价传递给多播组的所有成员
IGMP的作用是使得多播路由器知道多播组成员的信息,也就是及时通报知道本地局域网上是否有主机参加或者退出了某个多播组,IGMP不知道IP多播包含的成员数,也不知道这些成员都分布在哪些网络上
IGMP的工作流程
第一阶段:加入多播组,当某个主机加入多播组的时候,该主机向多播组的多播地址发送
IGMP报文,声明自己要成为该组的成员,本地的多播路由器收到IGMP报文之后,将组成员关系转发给互联网上的其他多播路由器第二阶段:本地多播路由器周期性地探询本地局域网上的主机,以便知道这些主机是否组的成员,只要对某个组有一个主机进行了响应,那么多播路由器就认为这个组是活跃的。但是如果一个组在经过几次的探询之后没有主机进行响应,则不再将该组的成员关系转发给其他的多播路由器。